<?php
/**
*  * 系统-受国家计算机软件著作权保护 - !
* =========================================================
* Copy right 2018-2025 成都海之心科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: http://www.ohyu.cn
* 这不是一个自由软件！在未得到官方有效许可的前提下禁止对程序代码进行修改和使用。
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
* =========================================================
* User: ohyueo
* Date: 2024/03/26
* Time: 21:25
*/
namespace app\admin\models;

use think\Model;

class BaseModel extends Model
{
    /* 
     * merid = 场馆商户id
     * tenantid = 租户id
     * mallid = 商城商户id
    */
    //写一个共用方法 拼接这三个条件 供其他静态方法调用
    public static function addSessionConditions($where)
    {
        // 如果有商户id则添加商户id
        $ohyu_merid = session('ohyu_admin_merid');
        //如果$where里面有where条件
        if(isset($where['where'])){
            $wherex = $where['where'];
            if ($ohyu_merid) {
                // 如果是二维数组
                if (isset($wherex[0]) && is_array($wherex[0])) {
                    $wherex[] = ['merid', '=', $ohyu_merid];
                } else {
                    // 如果是一维数组,直接增加条件
                    $wherex['merid']=$ohyu_merid;
                }
            }
            $where ['where'] = $wherex;
        }else{
            if ($ohyu_merid) {
                // 如果是二维数组
                if (isset($where[0]) && is_array($where[0])) {
                    $where[] = ['merid', '=', $ohyu_merid];
                } else {
                    // 如果是一维数组,直接增加条件
                    $where['merid']=$ohyu_merid;
                    //$where = [$where, ['merid', '=', $ohyu_merid]];
                }
            }
        }
        // 如果商城商户id 则添加商城商户id venues_admin_mallid
        $ohyu_mallid = session('ohyu_admin_mallid');
        if(isset($where['where'])){
            $wherex = $where['where'];
            if ($ohyu_mallid) {
                // 如果是二维数组
                if (isset($wherex[0]) && is_array($wherex[0])) {
                    $wherex[] = ['mallid', '=', $ohyu_mallid];
                } else {
                    // 如果是一维数组,直接增加条件
                    $wherex['mallid']=$ohyu_mallid;
                }
            }
            $where ['where'] = $wherex;
        }else{
            if ($ohyu_mallid) {
                // 如果是二维数组
                if (isset($where[0]) && is_array($where[0])) {
                    $where[] = ['mallid', '=', $ohyu_mallid];
                } else {
                    // 如果是一维数组,直接增加条件
                    $where['mallid']=$ohyu_mallid;
                    //$where = [$where, ['mallid', '=', $ohyu_mallid]];
                }
            }
        }
        return $where;
    }

    // 添加数据
    public static function addData($data)
    {   $data = $data??[];
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        return self::create($data);
    }
    // 添加多条数据
    public static function addAllData($data)
    {   
        $data = $data??[];
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        return self::insertAll($data);
    }
    // 更新数据
    public static function updatesData($arr)
    {     
        // 添加 session 条件
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($arr);
        }
        $where = $arr['where'] ?? [];
        $data = $arr['data'] ?? [];
        return self::where($where)->update($data);
    }
    // 删除数据
    public static function deleteData($data)
    {     
        // 添加 session 条件
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        $where = $data['where'] ?? [];
        return self::where($where)->delete();
    }
    // 查询多个字段
    public static function columnData($data)
    {     
        // 添加 session 条件
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        $where = $data['where'] ?? [];
        $order = $data['order'] ?? [];
        $field = $data['field'] ?? '*';
        return self::where($where)->order($order)->column($field);
    }
    // 查询单个字段
    public static function valueData($data)
    {     
        // 添加 session 条件
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        $where = $data['where'] ?? [];
        $field = $data['field'] ?? '*';
        $cache = $data['cache'] ?? false;//缓存
        if($cache){ //如果有缓存
            return self::cache($cache)->where($where)->value($field);
        }
        return self::where($where)->value($field);
    }
    // 查询单条数据
    public static function findData($data)
    {   
        // 添加 session 条件
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        $where = $data['where'] ?? [];
        $field = $data['field'] ?? '*';
        $lock = $data['lock'] ?? false;
        $cache = $data['cache'] ?? false;//缓存
        $res=self::where($where);
        if($lock){
            if($cache){ //如果有缓存
                $res->lock(true)->cache($cache);
                //return self::lock(true)->cache($cache)->where($where)->field($field)->find();
            }
            $res->lock(true);
            //return self::lock(true)->where($where)->field($field)->find();
        }
        //return self::where($where)->field($field)->find();
        return $res->field($field)->find();
    }

    // 查询多条数据
    public static function findAllData($data)
    {   
        // 添加 session 条件
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        $where = $data['where'] ?? [];
        $order = $data['order'] ?? [];
        $page = $data['page'] ?? 1;
        $limit = $data['limit'] ?? 0;
        $field = $data['field'] ?? '*';
        $isarr = $data['isarr'] ?? true;
        $cache = $data['cache'] ?? false;//缓存
        if($page && $limit){
            if($isarr){
                if($cache){ //如果有缓存
                    return self::cache($cache)->where($where)->order($order)->page($page,$limit)->field($field)->select()->toArray();
                }
                return self::where($where)->order($order)->page($page,$limit)->field($field)->select()->toArray();
            }else{
                if($cache){ //如果有缓存
                    return self::cache($cache)->where($where)->order($order)->page($page,$limit)->field($field)->select();
                }
                return self::where($where)->order($order)->page($page,$limit)->field($field)->select();
            }
        }else{
            if($isarr){
                if($cache){ //如果有缓存
                    return self::cache($cache)->where($where)->order($order)->field($field)->select()->toArray();
                }
                return self::where($where)->order($order)->field($field)->select()->toArray();
            }else{
                if($cache){ //如果有缓存
                    return self::cache($cache)->where($where)->order($order)->field($field)->select();
                }
                return self::where($where)->order($order)->field($field)->select();
            }
            //导出不需要分页
        }
    }
    //查询条数量
    public static function countData($data)
    {   
        // 添加 session 条件
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        $where = $data['where'] ?? [];
        $lock = $data['lock'] ?? false;//锁
        $cache = $data['cache'] ?? false;//缓存
        if($lock){ //如果有锁
            if($cache){ //如果有缓存
                return self::lock(true)->cache($cache)->where($where)->count();
            }
            return self::lock(true)->where($where)->count();
        }
        if($cache){ //如果有缓存
            return self::cache($cache)->where($where)->count();
        }
        return self::where($where)->count();
    }
    //统计多条数量
    public static function sumData($data)
    {   
        // 添加 session 条件
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        $where = $data['where'] ?? [];
        $field = $data['field'] ?? '';
        return self::where($where)->sum($field);
    }
    //自增1
    public static function setIncData($data)
    {   
        // 添加 session 条件
        $ismer = $data['ismer'] ?? true;
        if($ismer){
            $data = self::addSessionConditions($data);
        }
        $where = $data['where'] ?? [];
        $field = $data['field'] ?? '';
        $num = $data['num'] ?? 1;
        return self::where($where)->inc($field,$num)->update();
    }
}